import 'package:flutter/material.dart';
import 'package:s_mankey/config/router_config.dart';
import 'package:s_mankey/model/exp_waller_model.dart';
import 'package:s_mankey/model/user_model.dart';
import 'package:s_mankey/model/waller_model.dart';
import 'package:s_mankey/provider/view_state_list_model.dart';
import 'package:s_mankey/provider/view_state_model.dart';
import 'package:s_mankey/provider/view_state_refresh_list_model.dart';
import 'package:s_mankey/service/smonkey_repository.dart';

/// 加载my page的数据
class MyPageVModel extends ViewStateModel {

  var datas;
  var userInfo; //用户信息数据
  var fansDatas; //粉丝数据

  loadData() async {
    setBusy();
    try {
      List<Future> futures = [];
      futures.add(SmonkeysRepository.fetchMyFansNum());
      futures.add(SmonkeysRepository.fetchMyInfoData());
      datas = await Future.wait(futures); //等待多个请求一起返回
      fansDatas = datas[0];
      userInfo = datas[1];
      setIdle();
    } catch (e, s) {
      setError(e, s);
    }
  }
}



/// 加载firstDetail的数据
class MyPageFirstDetailVModel extends ViewStateModel {
  var datas;
  List<String> baseInfo = [];
  Icon sexIcon;

  initData() async {
    setBusy();
    try {
      datas =  await SmonkeysRepository.fetchMyFirstDetail();
      loadBaseInfo();
      setIdle();
    } catch (e, s) {
      setError(e, s);
    }
  }

  /// 重构基本信息数据结构
  loadBaseInfo(){
    List<String> list = ['chi_name', 'sex', 'city'];
    Map<String, dynamic> datas = this.datas['member'];

    list.forEach((element) {
      datas.forEach((key, value) {
        /// 转换为UI显示的性别数据
        if(key == 'sex') {
          if(value == 'F'){
          value = '女';
          sexIcon = Icon(Icons.pregnant_woman, color: Colors.pink,);
          } else {
            value = '男';
            sexIcon = Icon(Icons.accessibility, color: Colors.blue,);
        }
        }

        if(element == key){
          baseInfo.add(value);
        }
      });
    });
  }
}


/// 加载memberDetail的数据
class MyPageMemberDetailVModel extends ViewStateModel {
  Map<String, dynamic> datas; //总数据
  List<Map<String, dynamic>> acountDatas = []; //帐号信息数据
  List<Map<String, dynamic>> userDatas = []; //个人信息数据
  List<Map<String, dynamic>> jobDatas = []; //职业信息数据
//  Icon sexIcon; //性别数据

  initData() async {
    setBusy();
    try {
      Map<String, dynamic> result =  await SmonkeysRepository.fetchMyEditorDetail();
      datas = result['member'];
      loadAcountDatas();
      loadUserDatas();
      loadJobDatas();
      setIdle();
    } catch (e, s) {
      setError(e, s);
    }
  }

  // 重构帐号信息数组
  loadAcountDatas(){
    List<Map<String, dynamic>> acountList = [
      {'username': {'title': '昵称', 'val': null, 'key': 'username', 'type': 'input'}},
      {'description': {'title': '简介', 'val':  null, 'key': 'description', 'type': 'input'}}, ];
    acountDatas = filterData(acountList);
  }

  //重构个人信息数组
  loadUserDatas(){
    List<Map<String, dynamic>> userList = [
      {'chi_name': {'title': '姓名', 'val': null, 'key': 'chi_name', 'type': 'input'}},
      {'sex': {'title': '性别', 'val':  null, 'key': 'sex', 'type': 'singleSelect', 'datas': ['男', '女']}},
      {'dob': {'title': '生日', 'val':  null ,'key': 'dob', 'type': '', 'datas': []}},
      {'city': {'title': '城市', 'val':  null, 'key': 'city', 'type': 'input'}},
    ];
    var li = filterData(userList);
    // 更改性别显示
    (li[1]['val'] == 'F')? li[1]['val'] = '女': li[1]['val'] = '男';

    // 把val转换成ui可以显示的格式.
    li[2]['datas'] = (li[2]['val']).toString().split('-').map((e) => int.parse(e)).toList();
    userDatas = li;
  }

  //重构职业信息数组
  loadJobDatas(){
    List<Map<String, dynamic>> josList = [
      {'company': {'title': '公司名称', 'val': null, 'key': 'company', 'type': 'input'}},
      {'email': {'title': '邮箱', 'val':  null, 'key': 'email', 'type': 'input'}}, ];
    jobDatas = filterData(josList);
  }

  // 双循环过滤数据
  filterData(List list){
    List<Map<String, dynamic>> newList = [];
    //循环取出数值重构数组
    list.forEach((element) {
      var keys = element.keys.toList()[0]; //取出key值做对比
      datas.forEach((key, value) {
        // 找出两个数组一样的key值, 并赋值
        if(key == keys){
          element[key]['val'] = value['value'];
          newList.add(element[key]);
        }
      });
    });
//    print('newList: $newList');
    return newList;
  }
}


/// 盛点支持数据
class WalletVModel extends ViewStateModel {

  var datas; //总数据
  var walletDatas; //帐号信息数据
  var expDatas; //个人信息数据
//  bool showLoading = true;
//  Icon sexIcon; //性别数据

  initData() async {
    setBusy();
    try {
      List<Future> futures = [];

      futures
        ..add(SmonkeysRepository.fetchMyWallet())
        ..add(SmonkeysRepository.fetchMyExpWallet());

      /// 下标分别对应上面的请求顺序.
      datas = await Future.wait(futures);
//      if(datas.length >= 2) showLoading = false;
      walletDatas = datas[0];
      expDatas = datas[1];

      setIdle();
    } catch (e, s) {
      setError(e, s);
    }
  }

}


/// 选择课程邀请模型
class CourseInvitation extends ChangeNotifier {
  var datas; //总数据
  bool showResult = false; //显示搜索结果
  bool showList = false; //显示结果列表
  String keyword;
  Map cellData; //选中cell的数据

//  onSearch({String keyword}) async {
//    try {
//      /// 下标分别对应上面的请求顺序.
//      Map<String, dynamic> options = {'city': 'HK', 'mobile': '13535443779'};
//      await SmonkeysRepository.fetchMySearchChooseCourse(options: options).then((value) => {
//        datas = value,
//      showResult = true,
//        showList = true,
//      });
//      notifyListeners();
//    } catch (e, s) {
//      showList = false;
//      notifyListeners();
//      print('出错了$e');
//    }
//  }

  // 监听搜索结果是否显示
  onResult(bool isShow){
    showResult = isShow;
    notifyListeners();
  }

  // 选中cell的数据
  tapCellData(Map data){
    cellData = data;
//    notifyListeners();
  }
}

